home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1998.rar / 1998 / Mar / di9803cm / Main.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-12-19  |  12.3 KB  |  350 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComObj, POETClasses, POETAutomation_TLB, StdCtrls, Grids, ExtCtrls;
  8.  
  9. type
  10.   TfrmMain = class(TForm)
  11.     Label1: TLabel;
  12.     Label2: TLabel;
  13.     Label3: TLabel;
  14.     cmdExit: TButton;
  15.     Label4: TLabel;
  16.     cmdAddMgr: TButton;
  17.     cmdAddRep: TButton;
  18.     cmdDelMgr: TButton;
  19.     cmdDelRep: TButton;
  20.     lstSmgrs: TListBox;
  21.     lstSreps: TListBox;
  22.     lstSmIdx: TListBox;
  23.     lstSrIdx: TListBox;
  24.     lstSAccts: TListBox;
  25.     cmdAddAcct: TButton;
  26.     cmdDelAcct: TButton;
  27.     Label5: TLabel;
  28.     lstSaIdx: TListBox;
  29.     Image1: TImage;
  30.     procedure cmdExitClick(Sender: TObject);
  31.     procedure RefreshSRepList;
  32.     procedure RefreshSMgrList;
  33.     procedure RefreshAcctList;
  34.     procedure FormCreate(Sender: TObject);
  35.     procedure cmdAddMgrClick(Sender: TObject);
  36.     procedure cmdAddRepClick(Sender: TObject);
  37.     procedure cmdDelMgrClick(Sender: TObject);
  38.     procedure cmdDelRepClick(Sender: TObject);
  39.     procedure cmdDelAcctClick(Sender: TObject);
  40.     procedure cmdAddAcctClick(Sender: TObject);
  41.     procedure lstSrepsDblClick(Sender: TObject);
  42.     procedure lstSmgrsDblClick(Sender: TObject);
  43.     procedure lstSAcctsDblClick(Sender: TObject);
  44.   private
  45.     { Private declarations }
  46.   public
  47.     { Public declarations }
  48.   end;
  49.  
  50. const
  51.    PtDEEP = 1;
  52.    PtFLAT = 2 ;
  53.    PtNO_ONDEMAND = 3;
  54.    PtSHALLOW = 4;
  55.    PtSTART = 1;
  56.    PtCURRENT = 2;
  57.    PtEnd = 3;
  58.  
  59. var
  60.   frmMain: TfrmMain;
  61.   Salesbase: IPOETDatabase;          //Many of the application variables are given
  62.   DbIsOpen: Boolean;              //global scope to simplify the code. In practice,
  63.   SalesRep: PtSalesRep;           //global variables do not make the most efficient
  64.   SalesReps: IPOETExtent;          //use of memory resources.
  65.   SalesMgr: PtSalesMgr;
  66.   SalesMgrs: IPOETExtent;
  67.   Account: PtAccount;
  68.   Accounts: IPOETExtent;
  69.   RepAccount: PtAccount;          //SalesRep Acct
  70.   RepAccounts: OleVariant;
  71.   SmSalesRep: PtSalesRep;         //SalesMgr Rep
  72.   SmSalesReps: OleVariant;
  73.   AcctSalesRep: PtSalesRep;       //Acct SalesRep
  74.   AcctSalesReps: OleVariant;
  75.   SMgrFactory:IPOETApplicationObjectFactory;         //Factories for persistent objs
  76.   SRepFactory:IPOETApplicationObjectFactory;
  77.   AccountFactory: IPOETApplicationObjectFactory;
  78.   SalesQuery: IPOETOQLQuery;
  79.   QResult: OleVariant;
  80.   QStr: string;
  81.   FormSource: Integer; // 0=frmMain, 1=frmSRep, 2=frmSMgr, 3=frmAcct
  82.  
  83. implementation
  84.  
  85. uses Srep, Smgr, Acct, NewSmgr, NewSrep, NewAcct;
  86.  
  87. {$R *.DFM}
  88.  
  89.  
  90. procedure TfrmMain.cmdExitClick(Sender: TObject);
  91. begin
  92.      If DbIsOpen then Salesbase.Close;
  93.      Application.Terminate;
  94. end;
  95.  
  96. procedure TfrmMain.RefreshSRepList;
  97. begin
  98.    lstSReps.Clear;
  99.    lstSrIdx.Clear;
  100.    If SalesReps.First then repeat
  101.       SalesRep.PtObj := SalesReps.Get;
  102.       lstSReps.Items.Add(SalesRep.GetLname + ', ' + SalesRep.GetFname);
  103.       lstSrIdx.Items.Add(SalesRep.GetSurrogate);
  104.    until not SalesReps.Next;
  105. end;
  106.  
  107. procedure TfrmMain.RefreshSMgrList;
  108. begin
  109.    lstSmgrs.Clear;
  110.    lstSmIdx.Clear;
  111.    If SalesMgrs.First then repeat
  112.       SalesMgr.PtObj := SalesMgrs.Get;
  113.       lstSmgrs.Items.Add(SalesMgr.GetLname + ', ' + SalesMgr.GetFname);
  114.       lstSmIdx.Items.Add(SalesMgr.GetSurrogate);
  115.    until not SalesMgrs.Next;
  116. end;
  117.  
  118. procedure TfrmMain.RefreshAcctList;
  119. begin
  120.    lstSAccts.Clear;
  121.    lstSaIdx.Clear;
  122.    If Accounts.First then repeat
  123.       Account.PtObj := Accounts.Get;
  124.       lstSAccts.Items.Add(Account.GetName);
  125.       lstSaIdx.Items.Add(Account.GetSurrogate);
  126.    until not Accounts.Next;
  127. end;
  128.  
  129. procedure TfrmMain.FormCreate(Sender: TObject);
  130. begin
  131.    FormSource := 0;
  132.    DbIsOpen := False;
  133.    Salesbase := CoDatabase.Create;       //create and open database
  134.    Salesbase.logicalDatabaseName:='salesauto.dat';
  135.    Salesbase.logicalServerName:='LOCAL';
  136.    Salesbase.Open;
  137.    DbIsOpen := True;
  138.    SalesMgr := PtSalesMgr.Create;        //create encapsulated persistent objs.
  139.    SalesRep := PtSalesRep.Create;
  140.    Account := PtAccount.Create;
  141.    SalesReps := CoExtent.Create;         //create SalesReps extent
  142.    SalesReps.Database := Salesbase;
  143.    SalesReps.Classname := 'SalesRep';
  144.    SalesMgrs := CoExtent.Create;         //create SalesMgrs extent
  145.    SalesMgrs.Database := Salesbase;
  146.    SalesMgrs.Classname := 'SalesMgr';
  147.    Accounts := CoExtent.Create;          //create Accts extent
  148.    Accounts.Database := Salesbase;
  149.    Accounts.Classname := 'Account';
  150.    AcctSalesRep := PtSalesRep.Create;      //create Account SalesRep
  151.    RepAccount := PtAccount.Create;         //create SalesRep Acct
  152.    SmSalesRep := PtSalesRep.Create;        //create SalesMgr's SalesRep
  153.    SMgrFactory := CoApplicationObjectFactory.Create;
  154.    SMgrFactory.Database := Salesbase;
  155.    SMgrFactory.ClassName := 'SalesMgr';           //create SalesMgr factory
  156.    SRepFactory := CoApplicationObjectFactory.Create;
  157.    SRepFactory.Database := Salesbase;
  158.    SRepFactory.ClassName := 'SalesRep';           //create SalesRep factory
  159.    AccountFactory := CoApplicationObjectFactory.Create;
  160.    AccountFactory.Database := Salesbase;
  161.    AccountFactory.ClassName := 'Account';         //create Acct factory
  162.    RefreshSRepList;
  163.    RefreshSMgrList;
  164.    RefreshAcctList;
  165. end;
  166.  
  167. procedure TfrmMain.cmdAddMgrClick(Sender: TObject);
  168. begin
  169.    frmNewSMgr.show;
  170. end;
  171.  
  172. procedure TfrmMain.cmdAddRepClick(Sender: TObject);       //add SalesRep
  173. begin
  174.    frmNewSRep.show;
  175. end;
  176.  
  177. procedure TfrmMain.cmdDelMgrClick(Sender: TObject);       //delete SalesMgr
  178. begin
  179.    If lstSMgrs.ItemIndex < 0 then
  180.       begin
  181.          ShowMessage('Please make a selection!');
  182.          exit;
  183.       end;
  184.    SalesMgrs.First;
  185.    SalesMgrs.Seek(lstSMgrs.ItemIndex, PtSTART);   //locate SalesMgr selected
  186.    SalesMgr.PtObj := SalesMgrs.Get;
  187.    SalesMgr.Delete(PtDEEP);                        //any SalesRep assigned this SalesMgr
  188.    RefreshSMgrList;                                //now has invalid reference.
  189. end;
  190.  
  191. procedure TfrmMain.cmdDelRepClick(Sender: TObject);   //delete SalesRep
  192. var
  193.    s: string;
  194. begin
  195.   If lstSReps.ItemIndex < 0 then
  196.       begin
  197.          ShowMessage('Please make a selection!');
  198.          exit;
  199.       end;
  200.    SalesReps.First;
  201.    SalesReps.Seek(lstSReps.ItemIndex, PtSTART);
  202.    SalesRep.PtObj := SalesReps.Get;
  203.    s := SalesRep.GetSurrogate;                           //Set s to SalesRep object ID
  204.    If SalesRep.PtObj.IsValidReference('SalesMgr') then   //Remove reference
  205.       begin                                              //to this SalesRep
  206.          SalesMgr.PtObj := SalesRep.GetSalesMgr;         //in SalesMgr's Rep attribute
  207.          SmSalesReps := SalesMgr.GetSalesReps;           //set
  208.          SmSalesReps.First;
  209.          If SmSalesReps.First then repeat
  210.             SmSalesRep.PtObj := SmSalesReps.Get;
  211.             If SmSalesRep.GetSurrogate = s then break;
  212.          until not SmSalesReps.Next;
  213.          SmSalesReps.Delete;
  214.          SalesMgr.Store(PtDEEP);
  215.       end;
  216.    RepAccounts := SalesRep.GetAccounts;                //Remove reference to this
  217.    If RepAccounts.First then repeat                    //SalesRep from Acct's Rep
  218.       RepAccount.PtObj := RepAccounts.Get;             //list
  219.       AcctSalesReps := RepAccount.GetSalesReps;
  220.       If AcctSalesReps.First then repeat
  221.          AcctSalesRep.PtObj := AcctSalesReps.Get;
  222.          If AcctSalesRep.GetSurrogate = s then AcctSalesReps.Delete;
  223.       until not AcctSalesReps.Next;
  224.    until not RepAccounts.Next;
  225.    SalesRep.Delete(PtDeep);
  226.    RefreshSRepList;
  227. end;
  228.  
  229. procedure TfrmMain.cmdDelAcctClick(Sender: TObject);    //delete account
  230. var
  231.    s: string;
  232. begin
  233.   If lstSAccts.ItemIndex < 0 then
  234.       begin
  235.          ShowMessage('Please make a selection!');
  236.          exit;
  237.       end;
  238.    Accounts.First;
  239.    s := lstSaIdx.Items[lstSAccts.ItemIndex];     //set s to Acct object ID
  240.    Accounts.FindKey(s);
  241.    Account.PtObj := Accounts.Get;
  242.    AcctSalesReps := Account.GetSalesReps;
  243.    if AcctSalesReps.First then repeat              //remove reference to this
  244.       SalesRep.PtObj := AcctSalesReps.Get;         //account in SalesRep sets
  245.       RepAccounts := SalesRep.GetAccounts;
  246.       If RepAccounts.First then repeat
  247.          RepAccount.PtObj := RepAccounts.Get;
  248.          If RepAccount.GetSurrogate = s then RepAccounts.Delete;
  249.       until not RepAccounts.Next;
  250.       SalesRep.Store(PtDeep);
  251.    until not AcctSalesReps.Next;
  252.    Account.Delete (PtDEEP);
  253.    RefreshAcctList;
  254. end;
  255.  
  256. procedure TfrmMain.cmdAddAcctClick(Sender: TObject);    //Add account
  257. begin
  258.    frmNewAcct.show;
  259. end;
  260.  
  261. procedure TfrmMain.lstSrepsDblClick(Sender: TObject);    //display SalesRep info
  262. var
  263.    s: string;
  264.    ExistMgr: Boolean;
  265. begin
  266.    ExistMgr := False;
  267.    s := lstSrIdx.Items[lstSreps.ItemIndex];
  268.    SalesReps.First;
  269.    SalesReps.FindKey(s);
  270.    SalesRep.PtObj := SalesReps.Get;
  271.    frmSRep.lblInfo.Caption := SalesRep.GetFname + ' ' + SalesRep.GetLname
  272.          + ' (' + SalesRep.GetId + ')' + chr(32)
  273.          + chr(10) + SalesRep.GetAddr + chr(32) + chr(10) + SalesRep.GetCity + ', '
  274.          + SalesRep.GetState + ' ' + SalesRep.GetZip;
  275.    frmSRep.txtCSales.text := IntToStr(SalesRep.GetCurrentSales);
  276.    frmSRep.txtTSales.text := IntToStr(SalesRep.GetTargetQuota);
  277.    frmSRep.cboSMgr.Clear;
  278.    if SalesRep.PtObj.IsValidReference('SalesMgr') then    //chk if Rep has been assigned
  279.       begin                                               //a SalesMgr
  280.          SalesMgr.PtObj := SalesRep.GetSalesMgr;
  281.          s := SalesMgr.GetSurrogate;
  282.          frmSRep.cboSMgr.text := SalesMgr.GetLname + ', ' + SalesMgr.GetFname;
  283.       end
  284.    else  frmSRep.cboSMgr.text := '';
  285.    If SalesMgrs.First then repeat
  286.       SalesMgr.PtObj := SalesMgrs.Get;
  287.       if SalesMgr.GetSurrogate = s then ExistMgr := True;   //Chk if SalesMgr has been deleted
  288.       frmSRep.cboSMgr.Items.Add(SalesMgr.GetLName + ', ' + SalesMgr.GetFname);
  289.       frmSRep.lstSmIdx.Items.Add(SalesMgr.GetSurrogate);
  290.    until not SalesMgrs.Next;
  291.    If ExistMgr = False then frmSRep.cboSMgr.text := '';
  292.    RepAccounts := SalesRep.GetAccounts;                     //display SalesRep's list of accts
  293.    frmSRep.lstRepAccts.Clear;
  294.    frmSRep.lstSaIdx.Clear;
  295.    If RepAccounts.First then repeat
  296.       RepAccount.PtObj := RepAccounts.Get;
  297.       frmSRep.lstRepAccts.Items.Add(RepAccount.GetName);
  298.       frmSRep.lstSaIdx.Items.Add(RepAccount.GetSurrogate);
  299.    until not RepAccounts.Next;
  300.    frmSRep.show;
  301. end;
  302.  
  303. procedure TfrmMain.lstSmgrsDblClick(Sender: TObject);    //display SalesMgr info
  304. var
  305.    s: string;
  306. begin
  307.    s := lstSmIdx.Items[lstSmgrs.ItemIndex];
  308.    SalesMgrs.FindKey(s);
  309.    SalesMgr.PtObj := SalesMgrs.Get;
  310.    frmSMgr.lblInfo.Caption := SalesMgr.GetFname + ' ' + SalesMgr.GetLname
  311.          + ' (' + SalesMgr.GetId + ')'+ chr(32)
  312.          + chr(10) + SalesMgr.GetAddr + chr(32) + chr(10) + SalesMgr.GetCity + ', '
  313.          + SalesMgr.GetState + ' ' + SalesMgr.GetZip;
  314.    frmSMgr.ckCar.Checked := SalesMgr.GetCompanyCar;
  315.    frmSMgr.ckGym.Checked := SalesMgr.GetGymMembership;
  316.    frmSMgr.txtStocks.text := IntToStr(SalesMgr.GetStocks);
  317.    SmSalesReps := SalesMgr.GetSalesReps;
  318.    frmSMgr.lstSmSReps.Clear;
  319.    If SmSalesReps.First then repeat                        //Get assigned SalesReps list
  320.       SalesRep.PtObj := SmSalesReps.Get;
  321.       frmSMgr.lstSmSReps.Items.Add(SalesRep.GetLname + ', ' + SalesRep.GetFname);
  322.       frmSMgr.lstSmSrIdx.Items.Add(SalesRep.GetSurrogate);
  323.    until not SmSalesReps.Next;
  324.    frmSMgr.txtGSales.text := IntToStr(SalesMgr.GetCurrentSales);
  325.    frmSMgr.txtTSales.text := IntToStr(SalesMgr.GetTargetSales);
  326.    frmSMgr.show;
  327. end;
  328.  
  329. procedure TfrmMain.lstSAcctsDblClick(Sender: TObject);    //display Acct info
  330. var
  331.    s: string;
  332. begin
  333.    s := lstSaIdx.Items[lstSAccts.ItemIndex];
  334.    Accounts.FindKey(s);
  335.    Account.PtObj := Accounts.Get;
  336.    frmAcct.lblInfo.Caption := Account.GetId + Chr(32) + chr(10) + Account.GetName
  337.    + Chr(32) + chr(10) + Account.GetContact;
  338.    AcctSalesReps := Account.GetSalesReps;           //display list of reps assigned
  339.    frmAcct.lstAcctReps.Clear;                       //to this account
  340.    frmAcct.lstArIdx.Clear;
  341.    If AcctSalesReps.First then repeat
  342.       SalesRep.PtObj := AcctSalesReps.Get;
  343.       frmAcct.lstAcctReps.Items.Add(SalesRep.GetLname + ', ' + SalesRep.GetFname);
  344.       frmAcct.lstArIdx.Items.Add(SalesRep.GetSurrogate);
  345.    until not AcctSalesReps.Next;
  346.    frmAcct.show;
  347. end;
  348.  
  349. end.
  350.